/*
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.schema.domain.thing.creativeWork;

import java.net.URL;
import org.schema.domain.thing.CreativeWork;
import org.schema.domain.thing.creativeWork.WebPageElement;
import org.schema.domain.thing.creativeWork.mediaObject.ImageObject;
import org.schema.domain.thing.creativeWork.webPage.CollectionPage;

/**
 * A web page. Every web page is implicitly assumed to be declared to be of type WebPage, so the various properties about that webpage, such as breadcrumb may be used. We recommend explicit declaration if these properties are specified, but if they are found outside of an itemscope, they will be assumed to be about the page
 */
public interface WebPage extends CreativeWork {

	/**
	 * A set of links that can help a user understand and navigate a website hierarchy.
	 *
 	 * @return String
	 */
	String getBreadcrumb();

	/**
	 * A set of links that can help a user understand and navigate a website hierarchy.
	 *
 	 * @param string
	 * @return void
	 */
	void setBreadcrumb(String string);

	/**
	 * Indicates the collection or gallery to which the item belongs.
	 *
 	 * @return CollectionPage
	 */
	CollectionPage getIsPartOf();

	/**
	 * Indicates the collection or gallery to which the item belongs.
	 *
 	 * @param collectionPage
	 * @return void
	 */
	void setIsPartOf(CollectionPage collectionPage);

	/**
	 * Indicates if this web page element is the main subject of the page.
	 *
 	 * @return WebPageElement
	 */
	WebPageElement getMainContentOfPage();

	/**
	 * Indicates if this web page element is the main subject of the page.
	 *
 	 * @param webPageElement
	 * @return void
	 */
	void setMainContentOfPage(WebPageElement webPageElement);

	/**
	 * Indicates the main image on the page
	 *
 	 * @return ImageObject
	 */
	ImageObject getPrimaryImageOfPage();

	/**
	 * Indicates the main image on the page
	 *
 	 * @param imageObject
	 * @return void
	 */
	void setPrimaryImageOfPage(ImageObject imageObject);

	/**
	 * The most significant URLs on the page. Typically, these are the non-navigation links that are clicked on the most
	 *
 	 * @return URL
	 */
	URL getSignificantLinks();

	/**
	 * The most significant URLs on the page. Typically, these are the non-navigation links that are clicked on the most
	 *
 	 * @param uRL1
	 * @return void
	 */
	void setSignificantLinks(URL uRL1);

}